package zeus.model;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

@Entity
public class Quarto implements Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 5757861892977218447L;

	public Quarto(){
		this.oculpado = false;
		this.hospede = null;
	}
	
	@Id
	@GeneratedValue
	private Long id;
	
	private boolean oculpado;
	
	@OneToOne
	@JoinColumn(name="hospede_id")
	private Cliente hospede;
	
	@Enumerated(EnumType.STRING)
	private TipoQuarto tipoQuarto;
	
	private double preco;
	
	private String numero;
	
	@OneToMany(cascade= CascadeType.ALL)
	private List<Consumivel> consumiveis;

	public boolean isOculpado() {
		return oculpado;
	}

	public void setOculpado(boolean oculpado) {
		this.oculpado = oculpado;
	}

	public TipoQuarto getTipoQuarto() {
		return tipoQuarto;
	}

	public void setTipoQuarto(TipoQuarto tipoQuarto) {
		this.tipoQuarto = tipoQuarto;
	}

	public Cliente getHospede() {
		return hospede;
	}

	public void setHospede(Cliente hospede) {
		this.hospede = hospede;
	}

	public double getPreco() {
		return preco;
	}

	public void setPreco(double preco) {
		this.preco = preco;
	}

	public String getNumero() {
		return numero;
	}

	public void setNumero(String numero) {
		this.numero = numero;
	}

	public List<Consumivel> getConsumiveis() {
		return consumiveis;
	}

	public void setConsumiveis(List<Consumivel> consumiveis) {
		this.consumiveis = consumiveis;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((consumiveis == null) ? 0 : consumiveis.hashCode());
		result = prime * result + ((hospede == null) ? 0 : hospede.hashCode());
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result + ((numero == null) ? 0 : numero.hashCode());
		result = prime * result + (oculpado ? 1231 : 1237);
		long temp;
		temp = Double.doubleToLongBits(preco);
		result = prime * result + (int) (temp ^ (temp >>> 32));
		result = prime * result
				+ ((tipoQuarto == null) ? 0 : tipoQuarto.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Quarto other = (Quarto) obj;
		if (consumiveis == null) {
			if (other.consumiveis != null)
				return false;
		} else if (!consumiveis.equals(other.consumiveis))
			return false;
		if (hospede == null) {
			if (other.hospede != null)
				return false;
		} else if (!hospede.equals(other.hospede))
			return false;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (numero == null) {
			if (other.numero != null)
				return false;
		} else if (!numero.equals(other.numero))
			return false;
		if (oculpado != other.oculpado)
			return false;
		if (Double.doubleToLongBits(preco) != Double
				.doubleToLongBits(other.preco))
			return false;
		if (tipoQuarto != other.tipoQuarto)
			return false;
		return true;
	}

	
	
	
	
	

}
